Dados dos objetos, llamados: ObjectA y ObjectB :
var ObjectA = { config1: "5", config2: "6", config3: "7" } var ObjectB = { config1: "1", config2: "2", config4: "3", config5: "4" } ¿Cómo puedo copiar de ObjectB a ObjectA para que ObjectA tenga las mismas propiedades de ObjectB mientras que los valores de las propiedades en ObjectA se mantienen y los valores de ObjectB that doesn't exist en ObjectA se copian en ObjectA ?
Resultado Esperado:
ObjectA = { config1: "5", config2: "6", config4: "3", config5: "4" }config3 se elimina ya que no existe en ObjectB ,config4 con config5 se copian en ObjectA ya que no existen en ObjectA ,config1 con config2 se mantienen iguales en ObjectA ya que esos dos existen en ambos objetos)Usar reduce :
ObjectA = Object.keys(ObjectB).reduce( (acc, key) => ({ ...acc, [key]: ObjectA[key] ?? ObjectB[key]}), {} ) Esto usará las claves de ObjectB , tomará valores de ObjectA , cuando existan (con respaldo para ObjectB ) y completará un objeto vacío con los resultados.
Puedes usar la función reductora para resolver.
var ObjectA = { config1: "5", config2: "6", config3: "7" } var ObjectB = { config1: "1", config2: "2", config4: "3", config5: "4" } const res = Object.keys(ObjectB).reduce((prev, next) => { if(ObjectA[next]){ prev[next] = ObjectA[next]; } return prev; }, {...ObjectB}) console.log(res)Aquí hay una posible solución que es más de la vieja escuela: lo que esto hace básicamente:
function mergeObject(oldObj: Object, newObj: Object) { var copyOfOldObj = Object.assign({}, oldObj); for (const key in copyOfOldObj) { if (!newObj.hasOwnProperty(key)) { delete copyOfOldObj[key]; } } for (const key in newObj) { if (!copyOfOldObj.hasOwnProperty(key)) { copyOfOldObj[key] = newObj[key]; } } return copyOfOldObj; }